package com.bs.core.spring;

import java.util.Enumeration;
import java.util.Properties;

import org.slf4j.Logger;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

import com.bs.utils.config.FinalConstants;
import com.bs.utils.log.LogUtil;
import com.bs.utils.security.Des;

/**********************************************************
 * 文件名称：EncryptablePropertyPlaceholderConfigurer.java 
 * 摘    要：
 *
 * 初始版本：1.0.0.0
 * 原 作 者：叶平平
 * 完成日期：2014-10-31 下午5:02:39
 * 
 ************************************************************/
public class EncryptablePropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer{
	
	private static Logger log = LogUtil.get();
	
	private Des des = new Des();
	
	@SuppressWarnings("rawtypes")
	@Override
	protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props)throws BeansException{
		LogUtil.debug(log, "正在解密系统文件...");
		Enumeration enums = props.keys();
		while (enums.hasMoreElements()) {
			String key = (String)enums.nextElement();
			String value = (String)props.get(key);
			if(isEncryptPropertyVal(key)){
				des.getKey(FinalConstants.SECRET_KEY);
				key = key.replace("encrypt.", "");
				value =des.getDesString(value);//调用解密方法
				props.put(key.trim(),value);
			}else{
				props.put(key.trim(),value);
			}
			
		}
		super.processProperties(beanFactory, props); 
		LogUtil.debug(log, "结束解密系统文件...");
	}
	
	/**
	 * 功能描述：判断属性是否为encrypt开头的。
	 *
	 * @author  叶平平(yepp)
	 * <p>创建日期 ：2014-11-30 下午3:34:28</p>
	 *
	 * @param propertyName
	 * @return boolean
	 * 
	 * <p>修改历史 ：(修改人，修改时间，修改原因/内容)</p>
	 **/
	private boolean isEncryptPropertyVal(String propertyName) {
		if (propertyName.startsWith("encrypt")) {
			return true;
		} else {
			return false;
		}
	} 
}
